import {
  ActivityListVO,
  ActivityVO,
  FeedListVO,
  FeedVO,
  GetActivityDetailRequest,
  GetActivityFeedsRequest,
  GetActivityListRequest,
  GetActivityWinnersRequest,
  GetUserActivityStaticsRequest,
  GetUserParticipatedActivitiesRequest,
  GetUserVotesRequest,
  StaticsVO,
  VoteRequest,
} from '@/types/activity';
import { post } from '@/utils/request';

/**
 * 活动相关API
 */
export class ActivityAPI {
  /**
   * 获取活动列表
   * @param params 查询参数
   * @returns 活动列表响应
   */
  static async getActivityList(params: GetActivityListRequest) {
    return post<ActivityListVO>('/activity/list', params);
  }

  /**
   * 获取活动详情
   * @param params 查询参数，包含活动ID
   * @returns 活动详情响应
   */
  static async getActivityDetail(params: GetActivityDetailRequest) {
    return post<ActivityVO>('/activity/detail', params);
  }

  /**
   * 获取活动作品列表
   * @param params 查询参数，包含活动ID、排序类型、开始位置和每页数量
   * @returns 活动作品列表响应
   */
  static async getActivityFeeds(params: GetActivityFeedsRequest) {
    return post<FeedListVO>('/activity/feeds', params);
  }

  /**
   * 获取活动获奖作品列表
   * @param params 查询参数，包含活动ID
   * @returns 活动获奖作品列表响应
   */
  static async getActivityWinners(params: GetActivityWinnersRequest) {
    return post<FeedVO[]>('/activity/winners', params);
  }

  /**
   * 获取用户参加的活动列表
   * @param params 查询参数，包含用户ID、开始位置和每页数量
   * @returns 用户参加的活动列表响应
   */
  static async getActivityDesigns(params: GetUserParticipatedActivitiesRequest) {
    return post<ActivityListVO>('/activity/designs', params);
  }

  /**
   * 获取用户投票列表
   * @param params 查询参数，包含用户ID、开始位置和每页数量
   * @returns 用户投票列表响应
   */
  static async getUserVotes(params: GetUserVotesRequest) {
    return post<FeedListVO>('/activity/votes', params);
  }

  /**
   * 获取用户活动数据统计
   * @param params 查询参数，包含用户ID
   * @returns 用户活动数据统计响应
   */
  static async getUserActivityStatics(params: GetUserActivityStaticsRequest) {
    return post<StaticsVO>('/activity/statics', params);
  }

  /**
   * 投票
   * @param params 投票参数，包含活动ID和作品ID
   * @returns 投票结果
   */
  static async vote(params: VoteRequest) {
    return post<boolean>('/activity/vote', params);
  }
}
